package CodeBlock;

//代码块的调用顺序
//1.调用静态代码块和静态属性初始化：优先级相同，谁在前先调用谁
//2.调用普通代码块和普通属性初始化：优先级相同，谁在前先调用谁
//3.调用构造器


//静态代码块只能调用静态的方法和属性，普通代码块都可以调用
public class staticcodeblock_ {

    public static void main(String[] args) {
        new B();
    }
}


class A{
    //普通代码块
    {
        System.out.println("A类普通代码块被调用");
    }
    //普通属性
    public int n2 = getn2();

    //静态属性
    private static int n1 = getn1();

    //静态代码块
    static {
        System.out.println("A类静态代码块被调用..");
    }

    public static int getn1(){
        System.out.println("getn1()方法被调用");
        return 100;
    }

    public int getn2(){
        System.out.println("getn2()方法被调用");
        return 200;
    }

    public A(){
        System.out.println("A构造器被调用..");
    }


}

class B extends A{
    //普通代码块
    {
        System.out.println("B类普通代码块被调用");
    }
    //普通属性
    public int n4 = getn4();

    //静态属性
    private static int n3 = getn3();

    //静态代码块
    static {
        System.out.println("B类静态代码块被调用..");
    }

    public static int getn3(){
        System.out.println("getn3()方法被调用");
        return 100;
    }

    public int getn4(){
        System.out.println("getn4()方法被调用");
        return 200;
    }

    public B(){
        //隐藏了
        //super()
        //普通代码块的调用
        System.out.println("B构造器被调用..");
    }
}

